// 在性能统计对象中修改指标名称
const initPerfStats = () => ({
  startTime: 0,
  endTime: 0,
  ttft: 0,      // 首包时间 (Time To First Token)
  tfps: 0,      // 完成时间
  minTTFT: Number.MAX_VALUE,
  maxTTFT: 0,
  totalTTFT: 0,
  ttftCount: 0,
  minTFPS: Number.MAX_VALUE,
  maxTFPS: 0,
  totalTFPS: 0,
  tfpsCount: 0,
  totalBytes: 0,
  chunks: 0
});

// 在开始测试时记录起始时间
function startStreamTest() {
  const stats = initPerfStats();
  stats.startTime = performance.now();
  return stats;
}

// 收到第一个数据包时计算TTFT
function handleFirstChunk(stats) {
  stats.ttft = performance.now() - stats.startTime; // 首包时间计算
}

// 测试完成时计算TFPS
function finishStreamTest(stats) {
  stats.tfps = performance.now() - stats.startTime; // 完成时间计算
  return stats;
}

// 收集多个请求的TTFT统计
function collectTTFTStats(stats, ttft) {
  stats.ttft = ttft;
  stats.minTTFT = Math.min(stats.minTTFT, ttft);
  stats.maxTTFT = Math.max(stats.maxTTFT, ttft);
  stats.totalTTFT += ttft;
  stats.ttftCount++;
}

// 收集多个请求的TFPS统计
function collectTFPSStats(stats, tfps) {
  stats.tfps = tfps;
  stats.minTFPS = Math.min(stats.minTFPS, tfps);
  stats.maxTFPS = Math.max(stats.maxTFPS, tfps);
  stats.totalTFPS += tfps;
  stats.tfpsCount++;
}

// 在结果展示部分修改指标的显示
function renderTestResults(stats) {
  const avgTTFT = stats.ttftCount > 0 ? stats.totalTTFT / stats.ttftCount : 0;
  const avgTFPS = stats.tfpsCount > 0 ? stats.totalTFPS / stats.tfpsCount : 0;
  
  return `
    <div class="stats">
      <p>首包时间（TTFT）: ${stats.ttft.toFixed(2)}ms (最快: ${stats.minTTFT.toFixed(2)}ms, 平均: ${avgTTFT.toFixed(2)}ms, 最慢: ${stats.maxTTFT.toFixed(2)}ms)</p>
      <p>完成时间（TFPS）: ${stats.tfps.toFixed(2)}ms (最快: ${stats.minTFPS.toFixed(2)}ms, 平均: ${avgTFPS.toFixed(2)}ms, 最慢: ${stats.maxTFPS.toFixed(2)}ms)</p>
      <p>传输总量: ${formatBytes(stats.totalBytes)}</p>
    </div>
  `;
} 